package imnu.io.IO;

import java.io.*;

/**
 * @author: lys
 * @类名: Test_01
 * @Title:
 * @date: 2020/7/20
 **/
public class Test_01 {
    /**
     *方法描述：字节流，使用输入流读取一个文件的内容到CPU中，然后使用输出流将内容写出到指定的外部文件中
     */
    public static void main(String[] args) {
//        test01();
//        test02();
        test03();
    }

    //缓冲流
    public static void test03() {
        //创建一个输入流对象
        try ( BufferedReader is = new BufferedReader(
                new InputStreamReader(
                        new FileInputStream("D:\\java_test\\hello.txt")));
              //创建一个输出流对象
              //第二个参数，默认是false，从头开始写，true从末尾开始写
              BufferedWriter os = new BufferedWriter(
                      new OutputStreamWriter(
                              new FileOutputStream("D:\\java_test\\helloCopy3.txt",true)));)
        {
            //读取一行数据
            String str = is.readLine();
            //内容不为空继续读取，直到内容为空
            while (null != str){
                //将读入的数据写到文件中
                os.write(str);
                //换行
//                os.newLine();
                os.write("\n");
                //继续读下一行
                str = is.readLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //字符流
    public static void test02() {
        //创建一个输入流对象
        try ( Reader is = new FileReader("D:\\java_test\\hello.txt");
              //创建一个输出流对象
              //第二个参数，默认是false，从头开始写，true从末尾开始写
              Writer os = new FileWriter("D:\\java_test\\helloCopy2.txt");)
        {
            //用于读取字节流的字节数组
            char[] b = new char[1024];
            //将输入流中的内容读取到用于存储的字节数组中
            int len = is.read(b,0,1024);

            while (-1 != len){
                //使用输出流进行文件的复制
                os.write(b,0,len);
                System.out.println("OK.");
                //继续向下读
                len = is.read(b);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //字节流
    public static void test01() {
        //创建一个输入流对象
        try ( InputStream is = new FileInputStream("D:\\java_test\\hello.txt");
              //创建一个输出流对象
              //第二个参数，默认是false，从头开始写，true从末尾开始写
              OutputStream os = new FileOutputStream("D:\\java_test\\helloCopy.txt",true);)
        {
            //用于读取字节流的字节数组
            byte[] b = new byte[1024];
            //将输入流中的内容读取到用于存储的字节数组中
            int len = is.read(b,0,1024);

            while (-1 != len){
                //使用输出流进行文件的复制
                os.write(b,0,len);
                System.out.println("OK.");
                //继续向下读
                len = is.read(b);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
